package ve.com.wayoyo.wuml_case.DibujoDiagramas;

import java.util.ArrayList;

import ve.com.wayoyo.wuml_case.R;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class NuevoMetodoComponente extends Dialog {

	private TextView texto;
	private EditText nombreMetodo;
	private EditText retornoMetodo;
	private EditText nombreVariable;
	private EditText tipoDatoEntrada;
	private Spinner alcanceMetodo;
	//	private EditText EditText;
	private LinearLayout _metodo;
	private LinearLayout layoutTemp;
	private LinearLayout _layoutIn;
	private ArrayList<CompVariable> listaAtributosEntrada= new ArrayList<CompVariable>();

	public NuevoMetodoComponente(Context context) {
		super(context);
	}	

	@Override
	public void onCreate(Bundle savedInstanceState) {	
		super.onCreate(savedInstanceState);
		setContentView(R.layout.metodo_componente_layout);
		setTitle("Nuevo Metodo");
		_metodo = (LinearLayout) findViewById(R.id.metodosLayout);
		_metodo.removeAllViewsInLayout();
		_layoutIn = new LinearLayout(getContext());
		_layoutIn.setOrientation(LinearLayout.VERTICAL);
		this.setAlcanceMetodo();
		this.setNombreMetodo();
		this.setVariableRetorno();
		this.setVariablesEntrada();
		_metodo.addView(_layoutIn);
		this.setBotonGuardar();
	}

	private void setAlcanceMetodo() {
		layoutTemp = new LinearLayout(getContext());
		texto  = new TextView(getContext());
		texto.setText("Alcance");
		layoutTemp.addView(texto);		
		this.setModificadoresMetodos();
		_metodo.addView(layoutTemp);
	}

	private void setModificadoresMetodos() {
		alcanceMetodo = new Spinner(getContext());
		final String[] array_spinner = new String[3];
		array_spinner[0] = "Public";
		array_spinner[1] = "Private";
		array_spinner[2] = "Protected";

		ArrayAdapter<?> adapter = new ArrayAdapter<Object>(this.getContext(),
				android.R.layout.simple_spinner_item, array_spinner);
		alcanceMetodo.setAdapter(adapter);		
		alcanceMetodo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {				
			}

			public void onNothingSelected(AdapterView<?> arg0) {
				// TODO Auto-generated method stub

			}
		});
		layoutTemp.addView(alcanceMetodo);
	}

	private void setNombreMetodo(){
		layoutTemp = new LinearLayout(getContext());
		texto = new TextView(getContext());
		texto.setText("Nombre");		
		layoutTemp.addView(texto);
		this.setNombreMetodoEdit();
		_metodo.addView(layoutTemp);
	}

	private void setNombreMetodoEdit(){
		nombreMetodo = new EditText(getContext());
		nombreMetodo.setHint("Nombre del Metodo");
		nombreMetodo.setMinimumWidth(150);
		layoutTemp.addView(nombreMetodo);
	}

	private void setVariableRetorno(){
		layoutTemp = new LinearLayout(getContext());
		texto = new TextView(getContext());
		texto.setText("Variable de Retorno");
		layoutTemp.addView(texto);		
		this.setVariableRetornoEdit();
		_metodo.addView(layoutTemp);
	}

	private void setVariableRetornoEdit(){
		retornoMetodo = new EditText(getContext());		
		retornoMetodo.setHint("Tipo de retorno");
		retornoMetodo.setMinimumWidth(150);			
		layoutTemp.addView(retornoMetodo);
	}

	private void setVariablesEntrada(){
		texto = new TextView(getContext());
		texto.setText("Variables de Entrada");
		texto.setTextSize(20);
		_metodo.addView(texto);
		this.setNewVariablesEntrada();
		_metodo.addView(layoutTemp);
	}

	private void setNewVariablesEntrada(){
		layoutTemp = new LinearLayout(getContext());

		texto = new TextView(getContext());
		texto.setText("Nombre Atributo");
		layoutTemp.addView(texto);

		this.setNombreVariableEntrada();

		texto = new TextView(getContext());
		texto.setText("Tipo de Dato");
		layoutTemp.addView(texto);

		this.setTipoDatoEntrada();

		Button buttonOK = new Button(getContext());
		buttonOK.setText("Agregar");
		buttonOK.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {				
				String nombreVariabletexto = nombreVariable.getText().toString();
				String tipoDatotexto = tipoDatoEntrada.getText().toString();
				if ((nombreVariabletexto.equals(""))||(tipoDatotexto.equals(""))){
					tipoDatoEntrada.setText("");
					nombreVariable.setText("");
					tipoDatoEntrada.setHint("Int");
					nombreVariable.setHint("Nombre del Atributo");
				}else{
					listaAtributosEntrada.add(new CompVariable(nombreVariabletexto,tipoDatotexto));
					tipoDatoEntrada.setText("");
					nombreVariable.setText("");
				}
				if (listaAtributosEntrada.size()>0)
				{
					NuevoMetodoComponente.this.listaVariablesEntrada();
				}
			}
		});
		layoutTemp.addView(buttonOK);
	}

	protected void listaVariablesEntrada() {
		int pos = listaAtributosEntrada.size()-1;
		layoutTemp = new LinearLayout(getContext());		

		TextView nombreAtributo = new TextView(getContext());
		nombreAtributo.setText("Nombre Atributo: ");
		layoutTemp.addView(nombreAtributo);

		this.setNombreVariableLista(listaAtributosEntrada.get(pos));

		TextView tipoDatoText = new TextView(getContext());
		tipoDatoText.setText("Tipo de Dato: ");
		layoutTemp.addView(tipoDatoText);
		this.setTipoDatoEditLista(listaAtributosEntrada.get(pos));

		_layoutIn.addView(layoutTemp);

	}

	private void setTipoDatoEditLista(CompVariable CompVariable) {
		texto = new TextView(getContext());
		texto.setText(CompVariable.getTipoDato());
		texto.setMinimumWidth(100);
		layoutTemp.addView(texto);

	}

	private void setNombreVariableLista(CompVariable CompVariable) {
		texto = new TextView(getContext());
		texto.setText(CompVariable.getNombre());
		texto.setMinimumWidth(100);
		layoutTemp.addView(texto);

	}	

	private void setTipoDatoEntrada() {
		tipoDatoEntrada = new EditText(getContext());
		tipoDatoEntrada.setHint("Int");
		tipoDatoEntrada.setMinimumWidth(150);
		layoutTemp.addView(tipoDatoEntrada);
	}

	private void setNombreVariableEntrada() {
		nombreVariable = new EditText(getContext());		
		nombreVariable.setHint("Nombre del Atributo");		
		layoutTemp.addView(nombreVariable);	
	}

	private void setBotonGuardar(){
		Button buttonOK = new Button(getContext());
		buttonOK.setText("Guardar");
		buttonOK.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				int alc = alcanceMetodo.getFirstVisiblePosition();
				String alcance = "";
				switch (alc) {
				case 0:
					alcance = "public";
					break;
				case 1:
					alcance = "private";
					break;
				case 2:
					alcance = "protected";
					break;
				default:
					break;
				}
				String nombre = nombreMetodo.getText().toString();
				String retorno = retornoMetodo.getText().toString();
				CompMetodo metodo = new CompMetodo(nombre, alcance);
				metodo.setTipoDato(retorno);
				metodo.setVariablesEntrada(listaAtributosEntrada);
				((CompClase) VistaDiagrama.getVista().getDiagrama().getSelectedItem()).addMetodo(metodo);
				NuevoMetodoComponente.this.dismiss();
			}
		});
		_metodo.addView(buttonOK);
	}
	
}
